AQL (ArangoDB Query Language) হল ArangoDB-র নিজস্ব কোয়েরি ভাষা, যা SQL-এর মতো ডেটাবেস অপারেশনে ব্যবহৃত হয়। AQL অত্যন্ত শক্তিশালী এবং নমনীয়, এবং এটি ডেটার সিলেকশন, ফিল্টারিং, গ্রুপিং, এবং অ্যাগ্রিগেশন থেকে শুরু করে আরও উন্নত ডেটাবেস কার্যক্রম পরিচালনা করতে সক্ষম। এই টিউটোরিয়ালে, আমরা AQL এর কিছু অ্যাডভান্সড ফিচার আলোচনা করব যা আপনাকে আরও জটিল এবং কার্যকর কোয়েরি তৈরি করতে সাহায্য করবে।
AQL-এ Subqueries বা অন্তর্নিহিত কোয়েরি ব্যবহার করা সম্ভব, যা একটি কোয়েরির মধ্যে অন্য কোয়েরি চালানোর অনুমতি দেয়। এটি একটি কোয়েরির ফলাফলকে অন্য কোয়েরির ইনপুট হিসেবে ব্যবহার করে।
FOR user IN users
FILTER user.age > (FOR u IN users FILTER u.name == "John" RETURN u.age)[0]
RETURN user
ব্যাখ্যা:
ArangoDB একটি গ্রাফ ডেটাবেস হিসাবে কাজ করে, এবং এতে গ্রাফ ট্রাভার্সাল করার জন্য AQL অত্যন্ত শক্তিশালী। আপনি সহজেই Vertex এবং Edge ব্যবহার করে গ্রাফে ট্রাভার্সাল করতে পারেন।
FOR v, e, p IN 1..3 OUTBOUND "users/john" GRAPH "socialGraph"
RETURN v
ব্যাখ্যা:
AQL-এ Joins করতে SQL-এর মতো একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করা যায়। আপনি FOR-IN স্টেটমেন্ট ব্যবহার করে বিভিন্ন কালেকশনের মধ্যে যোগসূত্র তৈরি করতে পারেন।
FOR order IN orders
FOR user IN users
FILTER order.userId == user._key
RETURN { order: order, user: user }
ব্যাখ্যা:
AQL-এ Aggregation এবং Grouping অপারেশন ব্যবহার করে ডেটার উপর বিভিন্ন ধরনের পরিসংখ্যানিক অপারেশন করা যায়। AQL-এ অ্যাগ্রিগেশন ফাংশন যেমন SUM, AVG, COUNT, MIN, MAX ব্যবহৃত হয়।
FOR order IN orders
COLLECT product = order.product WITH COUNT INTO productCount
RETURN { product: product, count: productCount }
ব্যাখ্যা:
AQL-এ আপনি Custom Functions তৈরি করতে পারেন, যা কোডের পুনঃব্যবহারযোগ্য অংশ হিসেবে ব্যবহৃত হয়।
LET isAdult = (age) => age >= 18;
FOR user IN users
FILTER isAdult(user.age)
RETURN user
ব্যাখ্যা:
ArangoDB-তে Full-text Indexes ব্যবহার করে আপনি টেক্সটের মধ্যে অনুসন্ধান করতে পারেন, যা AQL-এ অত্যন্ত শক্তিশালী। Full-text Search আপনাকে দ্রুত এবং দক্ষভাবে টেক্সট অনুসন্ধান করতে সাহায্য করে।
FOR doc IN articles
SEARCH ANALYZER(doc.text IN "ArangoDB performance", "text_en")
RETURN doc
ব্যাখ্যা:
AQL-এ আপনি ডেটাকে Sort এবং Paginate করতে পারেন। SORT এবং LIMIT ব্যবহার করে আপনি ডেটাকে সাজাতে এবং পৃষ্ঠা বিভাজন করতে পারেন।
FOR user IN users
SORT user.age DESC
LIMIT 0, 10
RETURN user
ব্যাখ্যা:
ArangoDB-এ Geospatial Indexes ব্যবহার করে ভৌগোলিক ডেটার উপর queries করা যায়। এটি সাধারণত লোকেশন ডেটা যেমন latitude এবং longitude এর জন্য ব্যবহৃত হয়।
FOR place IN places
FILTER GEO_DISTANCE(place.location, { lat: 12.9716, lon: 77.5946 }) < 100
RETURN place
ব্যাখ্যা:
AQL-এ Conditional Expressions ব্যবহার করে আপনি বিভিন্ন শর্তের ভিত্তিতে ডেটা পরিচালনা করতে পারেন।
FOR user IN users
RETURN user.age >= 18 ? "Adult" : "Minor"
ব্যাখ্যা:
AQL-এ Transactions ব্যবহার করে একাধিক ডেটাবেস অপারেশনকে একটি একক ইউনিট হিসেবে সম্পন্ন করা যায়। এটি ডেটাবেসের ACID গুণাবলী নিশ্চিত করে।
LET trans = db._beginTransaction();
FOR user IN users
UPDATE user._key WITH { status: "active" } IN users
RETURN user
LET result = db._commitTransaction(trans);
RETURN result
ব্যাখ্যা:
AQL-এর অ্যাডভান্সড ফিচার আপনাকে শক্তিশালী, কার্যকরী এবং দ্রুত কোয়েরি তৈরি করতে সাহায্য করে। আপনি Subqueries, Graph Traversal, Joins, Aggregation, Custom Functions, এবং আরও অনেক কিছু ব্যবহার করে ডেটাবেসের কার্যকারিতা বাড়াতে পারেন। AQL-এর এই অ্যাডভান্সড ফিচারগুলোর মাধ্যমে আপনি ArangoDB এর সম্পূর্ণ শক্তি ব্যবহার করতে পারবেন।
ArangoDB-এর AQL (Arango Query Language) একটি শক্তিশালী কুয়েরি ভাষা, যা ডেটাবেসে জটিল ডেটা অ্যাগ্রিগেশন এবং বিশ্লেষণ করতে ব্যবহৃত হয়। অ্যাগ্রিগেশন হল ডেটা সংগ্রহের একটি প্রক্রিয়া, যেখানে এক বা একাধিক ডেটা ফিল্ডের উপর গাণিতিক বা পরিসংখ্যানিক ক্রিয়া (যেমন যোগফল, গড়, গুনফল) প্রয়োগ করা হয়।
ArangoDB-তে বিভিন্ন ধরনের অ্যাগ্রিগেশন ফাংশন এবং কৌশল রয়েছে, যেগুলি আপনাকে জটিল ডেটা বিশ্লেষণ করতে সাহায্য করবে। এখানে কিছু Advanced Aggregation Techniques নিয়ে আলোচনা করা হল:
একটি সাধারণ অ্যাগ্রিগেশন কৌশল হল GROUP BY
ব্যবহার করা, যা ডেটা গ্রুপিং করতে সহায়তা করে এবং গ্রুপের মধ্যে অ্যাগ্রিগেটেড মান বের করতে সহায়তা করে।
ধরা যাক, আমাদের কাছে একটি sales
নামে সংগ্রহ রয়েছে, যেখানে product_id
, sale_date
, এবং sale_amount
রয়েছে। আমরা যদি প্রতি প্রোডাক্টের মোট বিক্রির পরিমাণ বের করতে চাই, তাহলে আমরা GROUP BY
এবং SUM()
ফাংশন ব্যবহার করতে পারি:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE total_sales = SUM(sale.sale_amount)
RETURN { "product_id": product_id, "total_sales": total_sales }
এখানে:
COLLECT
ডেটাকে product_id
অনুযায়ী গ্রুপ করে।SUM()
ফাংশন গ্রুপের জন্য মোট বিক্রির পরিমাণ হিসাব করে।COUNT ফাংশন ব্যবহার করে আপনি কোনো গ্রুপের মধ্যে ডকুমেন্টের সংখ্যা বের করতে পারেন। COUNT DISTINCT ব্যবহার করলে আপনি শুধুমাত্র অনন্য মানের সংখ্যা পেতে পারেন।
ধরা যাক, আমরা কতটি বিক্রির রেকর্ড আছে তা জানতে চাই:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE total_sales_count = COUNT(sale)
RETURN { "product_id": product_id, "total_sales_count": total_sales_count }
এখানে, COUNT(sale)
বিক্রির রেকর্ডের সংখ্যা গননা করে।
যদি আমরা কতজন ভিন্ন গ্রাহক দ্বারা বিক্রি হয়েছে তা জানতে চাই:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE unique_customers = COUNT(DISTINCT sale.customer_id)
RETURN { "product_id": product_id, "unique_customers": unique_customers }
এখানে, COUNT(DISTINCT)
গ্রাহকের অনন্য সংখ্যা গননা করে।
ArangoDB-তে AVERAGE এবং MEDIAN ফাংশন ব্যবহার করে গড় এবং মধ্যম মান বের করা যায়।
একটি প্রোডাক্টের গড় বিক্রি পরিমাণ বের করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE avg_sale_amount = AVERAGE(sale.sale_amount)
RETURN { "product_id": product_id, "avg_sale_amount": avg_sale_amount }
এখানে, AVERAGE(sale.sale_amount)
বিক্রির গড় পরিমাণ বের করবে।
একটি প্রোডাক্টের বিক্রির মধ্যম মান (মিডিয়ান) বের করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE median_sale_amount = MEDIAN(sale.sale_amount)
RETURN { "product_id": product_id, "median_sale_amount": median_sale_amount }
এখানে, MEDIAN(sale.sale_amount)
বিক্রির মধ্যম মান (মিডিয়ান) বের করবে।
ArangoDB-তে PERCENTILES এবং QUARTILES ফাংশন ব্যবহার করে আপনি ডেটার মধ্যে নির্দিষ্ট মান বের করতে পারেন, যেমন ৯০ শতাংশ বা প্রথম কোয়ার্টাইল।
একটি প্রোডাক্টের ৯০ তম শতাংশ বিক্রির পরিমাণ বের করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE percentile_90 = PERCENTILE(sale.sale_amount, 90)
RETURN { "product_id": product_id, "percentile_90": percentile_90 }
এখানে, PERCENTILE(sale.sale_amount, 90)
বিক্রির ৯০ তম শতাংশ পরিমাণ বের করবে।
একটি প্রোডাক্টের প্রথম এবং তৃতীয় কোয়ার্টাইল বের করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE first_quartile = QUARTILE(sale.sale_amount, 1),
third_quartile = QUARTILE(sale.sale_amount, 3)
RETURN { "product_id": product_id, "first_quartile": first_quartile, "third_quartile": third_quartile }
এখানে, QUARTILE(sale.sale_amount, 1)
প্রথম কোয়ার্টাইল এবং QUARTILE(sale.sale_amount, 3)
তৃতীয় কোয়ার্টাইল বের করবে।
ArangoDB আপনাকে একটি অ্যারে সংগ্রহ করতে দেয়, যা দিয়ে আপনি গ্রুপের মধ্যে বিভিন্ন মান সংগ্রহ করতে পারেন। এই ফিচারটি ডেটার কিছু বিশেষ বৈশিষ্ট্য বা সূচক সংগ্রহ করার জন্য উপকারী।
যদি আপনি প্রতিটি প্রোডাক্টের বিক্রির পরিমাণ একটি অ্যারেতে সংগ্রহ করতে চান:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE sale_amounts = ARRAY_AGG(sale.sale_amount)
RETURN { "product_id": product_id, "sale_amounts": sale_amounts }
এখানে, ARRAY_AGG(sale.sale_amount)
বিক্রির পরিমাণগুলো একটি অ্যারেতে সংরক্ষণ করবে।
ArangoDB-তে আপনি nested aggregation করতে পারেন, যেখানে একাধিক স্তরে অ্যাগ্রিগেশন প্রয়োগ করা হয়। এটি আরও গভীর বিশ্লেষণের জন্য দরকারি।
প্রথমে একটি অঞ্চলের বিক্রির মোট পরিমাণ বের করুন, তারপর সেই অঞ্চলের মধ্যে প্রতি প্রোডাক্টের গড় বিক্রি পরিমাণ বের করুন:
FOR sale IN sales
COLLECT region = sale.region INTO grouped_sales
LET avg_sales = AVERAGE(grouped_sales[*].sale_amount)
RETURN { "region": region, "avg_sales": avg_sales }
এখানে, প্রথম COLLECT
স্টেটমেন্ট অঞ্চলের বিক্রির পরিমাণ গ্রুপ করে, এবং পরবর্তী LET
কমান্ডে গড় বিক্রি পরিমাণ হিসাব করা হয়।
ArangoDB-এর window functions আপনাকে একটি কোয়েরির ফলাফলের মধ্যে রেঙ্কিং, সাবস্ক্রিপশন, বা প্যারালাল রিডিং করার অনুমতি দেয়। এটি আপনাকে একটি নির্দিষ্ট উইন্ডো বা গ্রুপের মধ্যে কাজ করতে দেয়।
পণ্য বিক্রির ভিত্তিতে র্যাংক নির্ধারণ করতে:
FOR sale IN sales
COLLECT product_id = sale.product_id
AGGREGATE total_sales = SUM(sale.sale_amount)
LET rank = RANK(total_sales)
RETURN { "product_id": product_id, "total_sales": total_sales, "rank": rank }
এখানে, RANK(total_sales)
প্রতিটি পণ্যের বিক্রি অনুযায়ী র্যাংক নির্ধারণ করবে।
ArangoDB-তে Advanced Aggregation Techniques ডেটাবেসের বিশ্লেষণ এবং কার্যকর রিপোর্ট তৈরি করার জন্য অত্যন্ত গুরুত্বপূর্ণ। GROUP BY, COUNT DISTINCT, AVERAGE, PERCENTILE, ARRAY_AGG, Nested Aggregations এবং Window Functions আপনাকে ডেটার উপর বিস্তারিত বিশ্লেষণ করতে সাহায্য করবে। এই ফাংশনগুলি আপনার কোয়েরি কার্যক্ষমতা উন্নত করতে এবং বড় ডেটাসেটের মধ্যে গুরুত্বপূর্ণ তথ্য বের করার কাজে সহায়ক।
Recursive Queries হল এমন ধরনের কোয়েরি, যা নিজেই নিজেকে কল করে বা পূর্ববর্তী আউটপুট ব্যবহার করে পুনরায় কাজ করে। গ্রাফ ডেটাবেসে সাধারণত গ্রাফ ট্রাভার্সাল বা সম্পর্কিত ডেটার মধ্যে পুনরাবৃত্তির জন্য রিকার্সিভ কোয়েরি ব্যবহৃত হয়। ArangoDB-তে AQL (Arango Query Language) এর মাধ্যমে রিকার্সিভ কোয়েরি পরিচালনা করা যায়, যা গ্রাফ ডেটা মডেলিংয়ের জন্য অত্যন্ত কার্যকর।
ArangoDB-তে রিকার্সিভ কোয়েরি ব্যবহৃত হয় যখন আপনি গ্রাফ ডেটা মডেল থেকে সম্পর্কিত ডেটা পুনরায় এক্সপ্লোর করতে চান। বিশেষ করে Vertex এবং Edge এর মধ্যে সম্পর্ক খুঁজে বের করতে রিকার্সিভ কোয়েরি অত্যন্ত সহায়ক।
ধরা যাক, একটি সোশ্যাল নেটওয়ার্কের গ্রাফে ব্যক্তি (Person) এবং তাদের বন্ধু (Friend) সম্পর্ক সংরক্ষিত আছে। আপনি যদি জানতে চান, নির্দিষ্ট একজন ব্যক্তির বন্ধুদের বন্ধুরা কে, তাহলে একটি রিকার্সিভ কোয়েরি ব্যবহার করা হবে।
ArangoDB-তে রিকার্সিভ কোয়েরি চালানোর জন্য Graph Traversal অথবা WITH অপারেটর ব্যবহার করা হয়। সাধারণত এই কোয়েরি গুলি FOR লুপের মাধ্যমে সম্পন্ন হয়।
WITH অপারেটর ArangoDB-তে ব্যবহার করে আপনি একাধিক পর্যায়ে Edge Traversal বা গ্রাফের মধ্যে ডেটা ট্রাভার্স করতে পারেন। এটি রিকার্সিভ কোয়েরি তৈরির জন্য ব্যবহৃত হয়।
Query Description:
একটি ব্যক্তি থেকে তার বন্ধুদের (Friend), তারপর তাদের বন্ধুদের (Friend) বের করা হবে।
FOR person IN persons
LET friends = (
FOR friend IN OUTBOUND person friends
RETURN friend
)
LET friends_of_friends = (
FOR fof IN OUTBOUND friends friends
RETURN fof
)
RETURN {person: person.name, friends: friends, friends_of_friends: friends_of_friends}
এই কোয়েরি প্রথমে person
এর বন্ধুদের বের করবে (OUTBOUND Traversal), তারপর তাদের বন্ধুদের বের করবে। এটি দুটি লেট স্টেটমেন্টে বিভক্ত, যা প্রতিটি পর্যায়ে রিকার্সিভ কোয়েরি প্রয়োগ করে।
ArangoDB গ্রাফ ট্রাভার্সাল কার্যকলাপের জন্য অনেক শক্তিশালী বৈশিষ্ট্য সরবরাহ করে, যার মধ্যে DFS (Depth First Search) এবং BFS (Breadth First Search) অন্তর্ভুক্ত। এই ট্রাভার্সাল প্রযুক্তির মাধ্যমে আমরা গ্রাফের ভিতরে রিকার্সিভভাবে ডেটা অনুসন্ধান করতে পারি।
Max Depth:
FOR v, e, p IN 1..5 OUTBOUND 'person/123' friends
RETURN p.vertices
এখানে 1..5
নির্দেশ করে যে সর্বোচ্চ ৫টি স্তর পর্যন্ত ট্রাভার্সাল করা হবে।
Limit and Filter:
FOR person IN persons
FILTER person.age > 30
LET friends = (
FOR friend IN OUTBOUND person friends
FILTER friend.age > 30
RETURN friend
)
RETURN friends
Recursive Queries ArangoDB-তে গ্রাফ ডেটা মডেল থেকে সম্পর্কিত ডেটা খুঁজে বের করার জন্য একটি শক্তিশালী উপায়। AQL এবং Graph Traversal অপারেটর ব্যবহার করে, আপনি সহজেই একটি Vertex থেকে তার সম্পর্কিত Edge অনুসন্ধান করতে পারেন। তবে এই ধরনের কোয়েরি ব্যবহারের সময় Performance এবং Memory ব্যবস্থাপনাকে গুরুত্ব দিয়ে কনফিগারেশন করা উচিত।
ArangoDB-তে User-defined Functions (UDFs) তৈরি করার মাধ্যমে আপনি নিজের কাস্টম ফাংশন তৈরি করতে পারেন যা AQL (ArangoDB Query Language) কোয়েরিতে ব্যবহৃত হবে। UDFs ব্যবহার করে আপনি জটিল বা বিশেষ ধরণের কার্যাবলী পারফর্ম করতে পারেন যেগুলি স্ট্যান্ডার্ড AQL ফাংশন দ্বারা সরাসরি করা সম্ভব নয়।
ArangoDB-তে UDFs JavaScript ভাষায় লেখা হয় এবং তারা একটি কাস্টম AQL Function হিসেবে কাজ করে। এটি আপনাকে কোয়েরি চলাকালীন ডেটার উপর কাস্টম অপারেশন বা প্রক্রিয়া করার সুবিধা দেয়।
আপনি প্রথমে JavaScript ফাংশন লিখবেন যা কাস্টম কার্যাবলী সম্পাদন করবে।
function multiply(a, b) {
return a * b;
}
এটি একটি সিম্পল ফাংশন যা দুটি সংখ্যাকে গুণ করে। এটি AQL কোয়েরিতে ব্যবহার করা হবে।
ArangoDB তে UDF রেজিস্টার করতে আপনাকে Foxx Microservice ব্যবহার করতে হবে। প্রথমে Foxx অ্যাপ্লিকেশন তৈরি করুন এবং তার মধ্যে কাস্টম ফাংশনটি রেজিস্টার করুন।
Create a new Foxx service: আপনি একটি নতুন Foxx অ্যাপ তৈরি করবেন যা আপনার UDF (JavaScript function) যুক্ত করবে।
Foxx Microservice Example:
const foxx = require('@arangodb/foxx');
const router = foxx.Router();
// User-defined function (multiply)
router.get('/multiply/:a/:b', function (req, res) {
const a = parseInt(req.param('a'));
const b = parseInt(req.param('b'));
res.send({ result: multiply(a, b) });
});
module.context.use(router);
Install the Foxx service: অ্যাপ্লিকেশনটি ইনস্টল করতে:
arango-foxx install /myfoxx /path/to/foxx-app
এটি Foxx অ্যাপ্লিকেশনটি ArangoDB-এ ইনস্টল করবে এবং আপনি API রাউটগুলি ব্যবহার করতে পারবেন।
এখন আপনার তৈরি করা UDF অ্যাপ্লিকেশনে বা সরাসরি AQL কোয়েরি-তে ব্যবহার করা যাবে।
multiply
Function in AQL:LET result = MULTIPLY(5, 3)
RETURN result
এটি 5
এবং 3
গুণ করার জন্য আপনার কাস্টম UDF কল করবে, এবং এর ফলাফল হবে 15
।
ArangoDB-তে User-defined Functions (UDFs) তৈরি করার মাধ্যমে আপনি কাস্টম অপারেশন এবং কার্যাবলী AQL কোয়েরিতে যুক্ত করতে পারেন। UDFs ব্যবহার করে আপনি জটিল ডেটা প্রক্রিয়া এবং হিসাব সহজভাবে করতে পারেন, এবং এই ফাংশনগুলো কোয়েরির গতি বাড়ানোর জন্য ব্যবহৃত হতে পারে। ArangoDB-তে UDF তৈরি করতে JavaScript ব্যবহার করা হয়, এবং এগুলো Foxx Microservice-এর মাধ্যমে ArangoDB তে সংযুক্ত করা যায়।
ArangoDB একটি শক্তিশালী মাল্টি-মডেল ডাটাবেস, যা গ্রাফ ডেটা মডেলিং এর জন্য নেটিভ সমর্থন প্রদান করে। এর AQL (Arango Query Language) ব্যবহার করে আপনি জটিল গ্রাফ কোয়েরি লিখতে পারবেন, যা ডেটার মধ্যে সম্পর্ক এবং প্যাটার্ন বিশ্লেষণে সহায়ক। এই গাইডে আমরা ArangoDB-তে জটিল গ্রাফ কোয়েরি লেখার বিভিন্ন কৌশল আলোচনা করবো।
ArangoDB-তে গ্রাফ ট্র্যাভার্সাল ব্যবহার করে আপনি ডেটার মধ্যে সম্পর্ক খুঁজে পেতে পারেন। এটি সাধারণত vertex এবং edge এর মধ্যে সম্পর্ক বিশ্লেষণ করার জন্য ব্যবহৃত হয়।
ধরা যাক, আপনার দুটি কালেকশন আছে:
users
(যা vertices বোঝায়)friendships
(যা edges বোঝায়)এখন আপনি যদি Alice-এর সমস্ত বন্ধু খুঁজে পেতে চান, তাহলে একটি মৌলিক ট্র্যাভার্সাল কোয়েরি হতে পারে:
FOR user IN users
FILTER user.name == "Alice"
FOR friend, edge IN 1..2 OUTBOUND user friendships
RETURN friend.name
এই কোয়েরিটি:
friendships
এডজ ব্যবহার করে ২ লেভেল পর্যন্ত বন্ধুবান্ধব খুঁজে বের করে।ArangoDB-তে আপনি গ্রাফ কোয়েরিতে ফিল্টার এবং শর্ত যোগ করে আরও জটিল কোয়েরি তৈরি করতে পারেন। আপনি vertex এবং edge উভয়ের প্রপার্টি অনুসারে শর্ত যোগ করতে পারবেন।
যদি আপনি এমন কোয়েরি করতে চান যেখানে কিছু নির্দিষ্ট edge-এর প্রপার্টি, যেমন "date" ব্যবহার করে সম্পর্ককে ফিল্টার করবেন, তাহলে কোয়েরি কিছুটা এরকম হতে পারে:
FOR user IN users
FILTER user.name == "Alice"
FOR friend, edge IN 1..2 OUTBOUND user friendships
FILTER edge.date > "2022-01-01"
RETURN { "friend": friend.name, "since": edge.date }
এই কোয়েরিটি:
edge.date
friendships
এজ-এর একটি প্রপার্টি, যা বন্ধুত্বের তারিখ নির্দেশ করে।জটিল গ্রাফ কোয়েরিতে আপনি মাল্টি-হপ ট্র্যাভার্সাল ব্যবহার করতে পারেন, যেখানে একাধিক সম্পর্কের মধ্যে খুঁজে বের করতে হয়। এটি একাধিক hops বা লেভেলের মাধ্যমে সম্পর্কগুলো বিশ্লেষণ করতে সাহায্য করে।
যদি আপনি Alice-এর বন্ধুদের বন্ধুদের (২ হপ) খুঁজে পেতে চান, তাহলে কোয়েরিটি এরকম হবে:
FOR user IN users
FILTER user.name == "Alice"
FOR friend, edge IN 1..2 OUTBOUND user friendships
RETURN friend.name
এটি:
OUTBOUND
নির্দেশ করছে যে বন্ধুত্বের সম্পর্কটি Alice থেকে বাহিরে দিকে ট্র্যাভার্স করা হবে।ArangoDB-তে Bidirectional গ্রাফ কোয়েরি ব্যবহার করতে পারেন, যেখানে আপনি উভয় দিক থেকে ট্র্যাভার্সাল করতে পারেন। এটি তখন দরকার হয় যখন সম্পর্ক উভয় দিক থেকে গুরুত্বপূর্ণ হয় (যেমন, পারস্পরিক বন্ধুত্ব)।
Alice এবং অন্য ব্যবহারকারীর মধ্যে পারস্পরিক বন্ধুত্ব খুঁজে বের করার জন্য আপনি ANY
দিক ব্যবহার করতে পারেন, যা উভয় দিক থেকে ট্র্যাভার্সাল করবে:
FOR user IN users
FILTER user.name == "Alice"
FOR friend, edge IN 1..2 ANY user friendships
RETURN friend.name
এটি:
ArangoDB গ্রাফ অ্যালগরিদম সরবরাহ করে, যেমন শর্টেস্ট পাথ খোঁজা, যা দুটি vertex এর মধ্যে সবচেয়ে সরল সম্পর্ক (পথ) খুঁজে পেতে সাহায্য করে।
Alice এবং অন্য একটি ব্যবহারকারীর (যেমন, "Bob") মধ্যে শর্টেস্ট পাথ খুঁজে পেতে কোয়েরিটি হবে:
FOR v, e, p IN 1..10 ANY "users/Alice" friendships
FILTER v.name == "Bob"
RETURN p
এটি:
p
ভেরিয়েবলটি পথের বিবরণ ধারণ করে, যেমন কোন vertex এবং edge গুলি ট্র্যাভার্স করা হয়েছে।গ্রাফ কোয়েরির সাথে আপনি অ্যাগ্রিগেশন ফাংশন ব্যবহার করে ডেটা সংগ্রহ করতে পারেন, যেমন কাউন্ট, সাপেক্ষে বন্ধুদের সংখ্যা বা সম্পর্কের শক্তি বিশ্লেষণ করা।
ধরা যাক, users
কালেকশনে একটি location
প্রপার্টি রয়েছে, এবং আপনি জানতে চান Alice-এর কতজন বন্ধু একই শহরে থাকেন:
FOR user IN users
FILTER user.name == "Alice"
FOR friend, edge IN 1..2 OUTBOUND user friendships
FILTER friend.location == user.location
COLLECT city = user.location WITH COUNT INTO friend_count
RETURN { "city": city, "friend_count": friend_count }
এই কোয়েরিটি:
COLLECT
ফাংশন ব্যবহার করে শহর অনুযায়ী বন্ধুদের সংখ্যা গণনা করবে।আরও জটিল ক্ষেত্রের জন্য, আপনি পাথ বিশ্লেষণ করতে পারেন, যেখানে আপনি গ্রাফের মধ্যে একাধিক সম্পর্ক খুঁজে বের করতে পারেন।
যদি আপনি কোনো পাথের উপর এজ ওয়েট বিশ্লেষণ করতে চান (যেমন, বন্ধুত্বের শক্তি বা সম্পর্কের ভার), তাহলে কোয়েরিটি হবে:
FOR user IN users
FILTER user.name == "Alice"
FOR v, e, p IN 1..5 OUTBOUND user friendships
FILTER v.name == "Bob"
RETURN { "path": p.edges, "weight": SUM(p.edges[*].weight) }
এই কোয়েরিটি:
weight
প্রপার্টি দ্বারা পাথের শক্তি (অথবা সম্পর্কের গুরুত্ব) নির্ধারণ করবে।ArangoDB-তে আপনি Foxx microservices ফ্রেমওয়ার্ক ব্যবহার করে কাস্টম গ্রাফ অ্যালগরিদমও তৈরি করতে পারেন। আপনি JavaScript দিয়ে কাস্টম ট্র্যাভার্সাল লজিক এবং গ্রাফ প্রোসেসিং ইমপ্লিমেন্ট করতে পারেন।
ArangoDB গ্রাফ কোয়েরি লেখার জন্য AQL-এর মাধ্যমে শক্তিশালী সক্ষমতা প্রদান করে। আপনি মৌলিক এবং মাল্টি-হপ ট্র্যাভার্সাল, দ্বিমুখী ট্র্যাভার্সাল, গ্রাফ অ্যালগরিদম (যেমন শর্টেস্ট পাথ), অ্যাগ্রিগেশন এবং কাস্টম গ্রাফ অ্যালগরিদম ব্যবহার করে জটিল সম্পর্ক এবং প্যাটার্ন বিশ্লেষণ করতে পারেন। ArangoDB-এর এই ফিচারগুলি আপনাকে গ্রাফ ডেটা বিশ্লেষণ এবং সম্পর্কিত অ্যাপ্লিকেশন তৈরি করতে সাহায্য করবে।
common.read_more